/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Servlet;

import EJB.AgenciaViagemManagerRemote;
import Entidades.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.ejb.EJB;
import javax.jms.Session;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 *
 */

public class servletGerencia extends HttpServlet {
    @EJB
    AgenciaViagemManagerRemote avm;
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/xml;charset=UTF-8");
        //PrintWriter out = response.getWriter();
        HttpSession session = request.getSession(true);
        
        try {
            String opcao = request.getParameter("opcao");

            // Validar Admin
           if(opcao.equalsIgnoreCase("loginadmin")){
                    String login = request.getParameter("login");
                    String senha = request.getParameter("senha");
                    Admin adm = new Admin();
                    adm = avm.validaAdmin(login, senha);

                    if(adm!=null){
                        //System.out.println("Passou");
                        session.setAttribute("admin", adm);
                        response.sendRedirect("Admin.jsp");
                    }
                    else response.sendRedirect("AcessoNegado.jsp");
            }

            
            // Validar Cliente
            if(opcao.equals("logincliente")){
                Cliente c = new Cliente();
                String login = request.getParameter("login");
                String senha = request.getParameter("senha");
                c = avm.validaCliente(login,senha);
                if(c != null){
                    session.setAttribute("cliente", c);
                    response.sendRedirect("Cliente.jsp");
                }
                else  response.sendRedirect("AcessoNegado.jsp");
            }

            // Validar Compania
            if(opcao.equals("logincompania")){
                Compania comp = new Compania();
                comp=   avm.validaCompania(request.getParameter("login"),request.getParameter("senha"));
                if(comp != null){
                    session.setAttribute("compania", comp);
                    Compania c = new Compania(comp.getNome());
                    List<RotaHasCompania> listaTemp = avm.getAllRota(c);
                    List<String> listaRotasDaCompania = new ArrayList<String>();
                    Iterator it = listaTemp.iterator();

                    while(it.hasNext()){
                        RotaHasCompania r = (RotaHasCompania)it.next();
                        listaRotasDaCompania.add((r.getRotanome()).getNome());
                    }
                    session.setAttribute("listaRotasDaCompania", listaRotasDaCompania);
                    response.sendRedirect("Compania.jsp");
                }
                else  response.sendRedirect("AcessoNegado.jsp");
            }

            // valida Se cliente esta logado antes de efetivar compra passagem
            if(opcao.equalsIgnoreCase("validarCompra")){
                String escolhaCompania = request.getParameter("escolhaCompania");
                //System.out.println("compania " + escolhaCompania);
                session.setAttribute("escolhaCompania", escolhaCompania);
                Cliente c = null;
                c = (Cliente)session.getAttribute("cliente");
                if(c==null){
                    response.sendRedirect("ClienteNaoLogado.jsp");
                }

                else {
                    response.sendRedirect("ComprarPassagem.jsp");
                }
            }
            // Cadastro Cliente
            if(opcao.equals("cadastracliente")){
                Cliente c = new Cliente();
                c.setCpf(Integer.parseInt(request.getParameter("cpf")));
                c.setLogin(request.getParameter("login"));
                c.setNome(request.getParameter("nome"));
                c.setSenha(request.getParameter("senha"));
                if(avm.cadastraCliente(c)){
                    session.setAttribute("cliente", c);
                    response.sendRedirect("Cliente.jsp");
                }
                else {response.sendRedirect("CadastrarCliente.jsp");}
            }


            // Cadastro Compania
            if(opcao.equals("cadastracompania")){
                Compania comp = new Compania();
                comp.setLogin(request.getParameter("login"));
                comp.setNome(request.getParameter("nome"));
                comp.setSenha(request.getParameter("senha"));
                if(avm.cadastraCompania(comp)){
                    response.sendRedirect("Admin.jsp");
                }
                else {response.sendRedirect("erro.jsp");}
            }


            // Cadastro Rota
            if(opcao.equals("cadastrarota")){
                Rota r = new Rota();
                r.setNome(request.getParameter("nome"));
                r.setOrigem(request.getParameter("origem"));
                r.setDestino(request.getParameter("destino"));
                r.setDescricao(request.getParameter("descricao"));

                String nome_rota = (request.getParameter("nome"));
                Compania c = (Compania)session.getAttribute("compania");
                String nome_compania= c.getNome();



                if(avm.cadastraRota(r)){
                    avm.inserirRotaHasCompania(c, r);
                    response.sendRedirect("CadastroSucesso.jsp");
                }
                else {response.sendRedirect("CadastrarRota.jsp");}
            }


            // Cadastrar compra de cliente obs: cliente tem q estar logado
            if(opcao.equals("compraPassagem")){
                Cliente c = new Cliente(Integer.parseInt(request.getParameter("Cliente_cpf")));
                Rota r = new Rota(request.getParameter("nomeRota"));
                Compania comp = new Compania(request.getParameter("nomeCompania"));
                int numeroOnibus = Integer.parseInt(request.getParameter("numeroOnibus"));
                int numeroPoltrona = Integer.parseInt(request.getParameter("numeroPoltrona"));
                String HoraSaida = (request.getParameter("HoraSaida"));
                String HoraChegada = (request.getParameter("HoraChegada"));

                Passagem p = new Passagem();
                p.setClientecpf(c);
                p.setCompanianome(comp);
                p.setRotanome(r);
                p.setNumeroOnibus(numeroOnibus);
                p.setNumeroPoltrona(numeroPoltrona);
                p.setHoraSaida(HoraSaida);
                p.setHoraChegada(HoraChegada);

                if(avm.cadastraPassagem(p)){
                    response.sendRedirect("CompraSucesso.jsp");
                }
                else response.sendRedirect("erro.jsp");
            }

            // pagina dinamica que busca as rotas cadastradas pela empresa e grava na session lista de origem e destino
            if(opcao.equals("pesqRota")){
                List Listaorigens = avm.getAllOrigem();
                List<String> origens = new ArrayList<String>();
                Iterator it = Listaorigens.iterator();
                while(it.hasNext()){
                    String origem = ((String)it.next());
                    System.out.println("Origem : " +origem);
                    origens.add(origem);
                }

                List Listadestinos = avm.getAllDestino();
                List<String> destinos = new ArrayList<String>();
                Iterator it1 = Listadestinos.iterator();
                while(it1.hasNext()){
                    String destino = ((String)it1.next());
                    System.out.println("Destino : " +destino);
                    destinos.add(destino);
                }
                        session.setAttribute("ListaOrigens", origens);
                        session.setAttribute("ListaDestinos", destinos);
                        response.sendRedirect("PesquisaRota.jsp");
                    }
            
            // Pesquisa Rota pegando o nome da rota e as companias
            if(opcao.equals("pesquisarota")){

                String origem= request.getParameter("origem");
                String destino= request.getParameter("destino");
                Rota rota = avm.getRota(origem,destino);
                // insiro o obj rota na session
                session.setAttribute("rota",rota);

                List<RotaHasCompania> listaCompanias = avm.getCompanias(rota);
                List<String> listaC = new ArrayList<String>();
                
                Iterator it = listaCompanias.iterator();
                while(it.hasNext()){
                    RotaHasCompania r = (RotaHasCompania)it.next();
                    String nomeCompania = r.getCompanianome().getNome();
                    listaC.add(nomeCompania);
                }
                session.setAttribute("listaCompanias", listaC);
                response.sendRedirect("ResultPesquisaRota.jsp");
            }

            // Lista passageiros conforme a rota informada
            if(opcao.equals("pesquisaPassageirosPorRota")){
                String nomeRota = request.getParameter("listaRota");
                String nomeCompania = request.getParameter("nomeCompania");

             //   System.out.println(nomeCompania+"!!!!!!");
             //   System.out.println(nomeRota+"!!!!!!");

                Rota rota = new Rota(nomeRota);
                Compania companhia = new Compania(nomeCompania);

                List listadePassageiros = avm.getPassageiros(rota, companhia);
                List<Cliente> listaCliente = new ArrayList<Cliente>();

                Iterator it = listadePassageiros.iterator();

                while(it.hasNext()){
                    Passagem p = (Passagem)it.next();
                    Cliente c = new Cliente();
                    c.setNome(((Cliente)p.getClientecpf()).getNome());
                    c.setCpf(((Cliente)p.getClientecpf()).getCpf());
                    System.out.println(((Cliente)p.getClientecpf()).getNome());
                    listaCliente.add(c);
                }
                System.out.println("Tamanho da lista: "+listaCliente);
                session.setAttribute("listaPassageirosPorRota", listaCliente);
                response.sendRedirect("ResultPesquisaPassagem.jsp");
            }


            // CLiente escolhe uma opcao Pesquisar Rota ou Listar suas Rotas
            /* if(opcao.equals("escolhaDoCliente")){
                 String escolha = request.getParameter("escolha");
                 if(escolha.equalsIgnoreCase("Pesquisar Rota")){

                        response.sendRedirect("PesquisaRota.jsp");
                 }
                 else if(escolha.equalsIgnoreCase("Listar Passagens")){
                       response.sendRedirect("teste.jsp");
                       }
             }
             */
             if(opcao.equals("opcaoAdmin")){
                 String escolha = request.getParameter("escolhaAdmin");
                 if(escolha.equalsIgnoreCase("Cadastro Compania")){
                        response.sendRedirect("CadastrarCompania.jsp");
                 }
                 else if(escolha.equalsIgnoreCase("Remover Compania")){
                       List<Compania> listaTodasCompanias = avm.getAllCompanias();
                       session.setAttribute("listaTodasCompanias", listaTodasCompanias);
                       response.sendRedirect("RemoveCompania.jsp");
                       }
             }


            // Administrador pode Remover
            if(opcao.equalsIgnoreCase("removerCompania")){
                String nomeCompania = request.getParameter("escolhaRemoverCompania");
                Compania c = new Compania(nomeCompania);
                avm.removerCompania(c);
                response.sendRedirect("Admin.jsp");
            }


        }catch (Exception ex){ex.printStackTrace();}
}
    

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
